package com.yf.modules.system.service.api;

import com.yf.domain.security.Role;
import com.yf.model.query.RoleQueryCriteria;
import com.yf.modules.system.model.dto.RoleSmallDto;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.List;
import java.util.Set;

/**
 * @author chentianwei
 * @date 2024-01-25 15:37
 * @description 用户角色Api
 */
public interface RoleService {

    /**
     * 通过用户ID获取用户下所有的角色
     * @param id 用户的唯一主键
     * @return 该用户下挂的角色
     */
    List<RoleSmallDto> findRolesByUserId(Long id);

    /**
     * 根据菜单Id查询
     * @param menuId /
     * @return /
     */
    List<Role> findByMenuId(Long menuId);

    /**
     * 查询角色信息
     * @param criteria 查询条件
     * @return 角色集合
     */
    List<Role> queryRole(RoleQueryCriteria criteria);

    /**
     * 新增角色
     * @param role 实体
     */
    void addRole(Role role);

    /**
     * 编辑角色
     * @param role 实体
     */
    void editRole(Role role);

    /**
     * 删除角色
     * @param ids 主键
     */
    void deleteRole(Set<Long> ids);

    /**
     * 下载角色信息
     * @param response servlet返回体
     * @param criteria 查询条件
     */
    void download(HttpServletResponse response,RoleQueryCriteria criteria) throws IOException;

    /**
     * 验证是否被用户关联
     * @param ids /
     */
    void verification(Set<Long> ids);

    /**
     * 关联角色-菜单
     * @param role 角色
     */
    void linkRoleMenu(Role role);
}
